<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>OOP 变更日志</title>

 </head>
 <body><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="language.oop5.serialization.html">对象序列化</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="language.namespaces.html">命名空间</a></div>
 <div class="up"><a href="language.oop5.html">类与对象</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div><hr /><div id="language.oop5.changelog" class="sect1">
 <h2 class="title">OOP 变更日志</h2>
 <p class="para">
  PHP 5 OOP 模型的变更将被记录在此。功能的描述与其他相关注意事项记录在了 OOP 5 文档之中。
 </p>
 <p class="para">
  <table class="doctable informaltable">
   
    <thead>
     <tr>
      <th>版本</th>
      <th>说明</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td>5.4.0</td>
      <td>
       已变更：如果一个 <a href="language.oop5.abstract.html" class="link">抽象</a> 类定义了构造函数的签名，它将必须被实现。
      </td>
     </tr>

     <tr>
      <td>5.3.3</td>
      <td>
       已变更： <a href="language.namespaces.html" class="link">命名空间</a> 中和类同名的方法不再被作为 <a href="language.oop5.decon.html" class="link">构造函数</a>。这个变更不影响非命名空间中的类。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       已变更：类实现接口的方法所具有的默认值不再需要和接口的默认值一致。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       已变更： 现在它也能够通过一个变量来引用一个类（例如，<em>echo $classname::constant;</em>）。
       这个变量的值不能是一个保留关键词（比如，<em>self</em>、<em>parent</em> 或 <em>static</em>）。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       已变更： 如果<a href="language.oop5.overloading.html" class="link">重载</a>方法被定义为 <a href="language.oop5.static.html" class="link">static</a> 将导致一个 <strong><code>E_WARNING</code></strong> 级别的错误。
       同时它也需要强制使用 public 的可见性。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       已变更： 在 5.3.0 之前的版本，<a href="language.oop5.autoload.html" class="link">__autoload</a> 函数里抛出的异常不能被 <a href="language.exceptions.html" class="link">catch</a> 块结构捕获，并会导致一个致命错误。
       现在在一个前提下 <a href="language.exceptions.html" class="link">catch</a> 块能够捕获 __autoload 函数中抛出的错误。如果抛出一个自定义异常，这个自定义异常的类必须是可用的。否则 __autoload 函数可能递归自动加载这个自定义异常类。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       新增： <a href="language.oop5.overloading.html" class="link">__callStatic</a> 方法。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       新增： <a href="language.types.string.html#language.types.string.syntax.heredoc" class="link">heredoc</a>
       和 <a href="language.types.string.html#language.types.string.syntax.heredoc" class="link">nowdoc</a>
       支持类的 <em class="emphasis">常量</em> 和属性的定义。
       注意：heredoc 值必须和双引号字符串遵循同样的规则（比如，变量将被替换）。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       新增： <a href="language.oop5.late-static-bindings.html" class="link">后期静态绑定</a>。
      </td>
     </tr>

     <tr>
      <td>5.3.0</td>
      <td>
       新增： <a href="language.oop5.magic.html#language.oop5.magic.invoke" class="link">__invoke</a> 方法。
      </td>
     </tr>

     <tr>
      <td>5.2.0</td>
      <td>
       已变更：<a href="language.oop5.magic.html#language.oop5.magic.tostring" class="link">__toString</a> 方法仅在直接与  <span class="function"><a href="function.echo.html" class="function">echo</a></span> 或 <span class="function"><a href="function.print.html" class="function">print</a></span> 使用时被调用。但是现在它能在任何字符串上下文被调用（比如在 <span class="function"><a href="function.printf.html" class="function">printf()</a></span> 中使用 <em>%s</em> ），但不是在其他类型的上下文被调用（例如 <em>%d</em> 修饰符）。
       自 PHP 5.2.0 起，将不具有 <em>__toString</em> 方法的对象转化为字符串将导致一个 <strong><code>E_RECOVERABLE_ERROR</code></strong> 级别的错误。
      </td>
     </tr>

     <tr>
      <td>5.1.3</td>
      <td>
       已变更：在 PHP 5 之前的版本，<em>var</em> 的使用已被废弃，并将产生一个 <strong><code>E_STRICT</code></strong> 级别的错误。现在它不再被废弃，因此也不会产生错误。
      </td>
     </tr>

     <tr>
      <td>5.1.0</td>
      <td>
       已变更：现在 <a href="language.oop5.magic.html#language.oop5.magic.set-state" class="link">__set_state</a> 静态方法在 <span class="function"><a href="function.var-export.html" class="function">var_export()</a></span> 导出类时会被调用。
      </td>
     </tr>

     <tr>
      <td>5.1.0</td>
      <td>
       新增：<a href="language.oop5.overloading.html#language.oop5.overloading.members" class="link">__isset</a> 和 <a href="language.oop5.overloading.html#language.oop5.overloading.members" class="link">__unset</a> 方法。
      </td>
     </tr>

    </tbody>
   
  </table>

 </p>
</div><hr /><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="language.oop5.serialization.html">对象序列化</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="language.namespaces.html">命名空间</a></div>
 <div class="up"><a href="language.oop5.html">类与对象</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div></body></html>
